//编译加上 -lssl -lcrypto
#include <stdio.h>
#include <string.h>
#include <openssl/aes.h>
#include <openssl/evp.h> // 密钥派生函数需要的头文件

// 加密密钥，16字节
unsigned char encryption_key[] = "1234567890123456";

// 加密函数
void encrypt(const unsigned char *input, int input_len, unsigned char *output) {
    AES_KEY aes_key;
    EVP_CIPHER_CTX *ctx;

    // 创建并初始化加密上下文
    ctx = EVP_CIPHER_CTX_new();
    EVP_EncryptInit_ex(ctx, EVP_aes_128_ecb(), NULL, encryption_key, NULL);

    // 执行加密操作
    EVP_EncryptUpdate(ctx, output, &input_len, input, input_len);
    EVP_EncryptFinal_ex(ctx, output + input_len, &input_len);

    // 释放加密上下文
    EVP_CIPHER_CTX_free(ctx);
}

// 解密函数
void decrypt(const unsigned char *input, int input_len, unsigned char *output) {
    AES_KEY aes_key;
    EVP_CIPHER_CTX *ctx;

    // 创建并初始化解密上下文
    ctx = EVP_CIPHER_CTX_new();
    EVP_DecryptInit_ex(ctx, EVP_aes_128_ecb(), NULL, encryption_key, NULL);

    // 执行解密操作
    EVP_DecryptUpdate(ctx, output, &input_len, input, input_len);
    EVP_DecryptFinal_ex(ctx, output + input_len, &input_len);

    // 释放解密上下文
    EVP_CIPHER_CTX_free(ctx);
}

int main() {
    const unsigned char input[] = "Hello, encryption!";
    unsigned char ciphertext[1024]; // 注意确保足够大以容纳加密后的数据
    unsigned char decryptedtext[1024];
    int input_len = strlen(input);

    printf("Original: %s\n", input);

    // 加密操作
    encrypt(input, input_len, ciphertext);
    printf("Encrypted: ");
    for (int i = 0; i < input_len; i++) {
        printf("%02x", ciphertext[i]);
    }
    printf("\n");

    // 解密操作
    decrypt(ciphertext, input_len, decryptedtext);
    decryptedtext[input_len] = '\0'; // 加上字符串结尾
    printf("Decrypted: %s\n", decryptedtext);

    return 0;
}


